package com.jy.wms.service;

import com.jy.wms.common.UUIDUtils;
import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.pojo.*;
import com.jy.wms.dao.WmsLineMapper;
import org.apache.ibatis.annotations.Param;
import org.hibernate.validator.constraints.ModCheck;
import org.springframework.stereotype.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import java.util.List;

    /**
    * @ClassName: WmsLineService.java
    * @Description: TODO(这里用一句话描述这个类的作用)
    * @Author ln
    * @Date Tue Oct 17 14:42:39 CST 2017
    */

    @Service
    public class WmsLineService extends BaseService<WmsLineMapper,WmsLine> {

     /**
     * 插入一条记录
     * @param entity 实体对象
     * @return int
     */
     @BaseServiceDescribe(moduleName = "新增线路",btnName = "新增线路")
    public void baseInsert( WmsLine entity)throws SucessException,ServiceException{
            int getCounts=dao.getcount(entity.getXlmc(),entity.getHzid(),null);//查询该货主下有无相同路线名称
            if (getCounts==0){
                entity.setId(UUIDUtils.uuid());
                //添加线路表数据
                int i=dao.baseInsert(entity);
                if (i>0){
                    List<WmsLineDetailed> list=entity.getList();
                    WmsLineDetailed ws=null;
                    StringBuffer sb=new StringBuffer();
                    for (int j=0;j<list.size();j++){
                        ws=new WmsLineDetailed();
                        //查询路线明细中 市是否存在 如果存在 不可以放入明细表中
                        int sfcz=dao.getcountSsCz(list.get(j).getSheng(),list.get(j).getShi(),entity.getHzid(),entity.getCkid());
                        System.out.println(sfcz+"================");
                        if (sfcz>0){
                            sb.append(list.get(j).getSheng());
                            sb.append(list.get(j).getShi());
                        }else {
                            ws.setId(UUIDUtils.uuid());
                            ws.setXlid(entity.getId());
                            ws.setSheng(list.get(j).getSheng());
                            ws.setCs(list.get(j).getShi());
                            dao.baseMxInsert(ws);//添加线路明细数据
                        }
                    }
                    if (sb.length()==0){
                        throw new SucessException("线路新增成功");
                    }else {
                        throw new SucessException("线路新增成功,"+sb+"省市已存在");
                    }

                }else {
                    throw new ServiceException("线路新增失败");
                }
            }else {
                throw new ServiceException("相同货主下线路不能重复添加");
            }
    }

   /**
    * 插入一条记录（匹配有值的字段）
    * @param entity 实体对象
    * @return int
    */
    public Integer baseInsertSelective( WmsLine entity){
         return dao.baseInsertSelective( entity);
    }

   /**
    * 删除（根据主键ID删除）
    * @param id 主键
    * @return int
    */
    public Integer baseDeleteByPrimaryKey( String id){
         return dao.baseDeleteByPrimaryKey( id);
    }

   /**
    * 删除（根据ID 批量删除）
    * @param idList 主键ID列表
    * @return int
    */
    public Integer baseDeleteBathPrimaryKeys( List<String> idList){
         return dao.baseDeleteBathPrimaryKeys( idList );
    }

    /**
    * 分页查询
    * @param entity 实体
    * @return Page<WmsLine>
    */
    @BaseServiceDescribe(moduleName = "线路",btnName = "分页查询")
    public Page<WmsLine> baseSelectPage(WmsLine entity )throws Exception{
        Page<WmsLine> list=null;
        try {
            PageHelper.startPage(entity.getPage(),entity.getRows());
            list=(Page<WmsLine>)dao.baseSelectPage(entity);
            return list;
        }catch (Exception e){
            throw new ServiceException("线路分页查询失败",e);
        }
    }
   /**
    * 查询（根据主键ID查询）
    * @param id 主键ID
    * @return WmsLine
    */
   @BaseServiceDescribe(moduleName = "根据id查询线路",btnName = "根据id查询线路")
    public WmsLine baseSelectByPrimaryKey( String id ) throws Exception{
        WmsLine wl=null;
        try {
            wl= dao.baseSelectByPrimaryKey(id);
            return wl;
        }catch (Exception e){
            throw new ServiceException("线路查询失败",e);
        }

    }

   /**
    * 查询（根据ID 批量查询）
    * @param idList 主键ID列表
    * @return list
    */
    public Integer baseSelectBathPrimaryKeys( List<WmsLine> idList ){
         return dao.baseSelectBathPrimaryKeys( idList );
    }

   /**
    *修改 （匹配有值的字段）
    * @param entity 主键ID列表
    * @return int
    */
   @BaseServiceDescribe(moduleName = "编辑线路",btnName = "编辑线路")
    public void baseUpdateByPrimaryKeySelective( WmsLine entity) throws SucessException,ServiceException{
            int getCounts=dao.getcount(entity.getXlmc(),entity.getHzid(),entity.getId());//查询该货主下有无相同路线名称
            if (getCounts==0){
                int i=dao.baseUpdateByPrimaryKeySelective(entity);
                if (i>0){
                    //修改成功 根据路线id 删除省市
                        dao.delectSs(entity.getId());
                        List<WmsLineDetailed> list=entity.getList();
                        WmsLineDetailed ws=null;
                        StringBuffer sb=new StringBuffer();

                        for (int j=0;j<list.size();j++){
                            ws=new WmsLineDetailed();
                            System.out.println(entity.getHzid()+"=======");
                            System.out.println(entity.getCkid()+"==-----");
                            //查询路线明细中 市是否存在 如果存在 不可以放入明细表中
                           Integer sfcz=dao.getcountSsCz(list.get(j).getSheng(),list.get(j).getShi(),entity.getHzid(),entity.getCkid());
                            if (sfcz>0){
                                sb.append(list.get(j).getSheng());
                                sb.append(list.get(j).getShi());
                            }else {
                                ws.setId(UUIDUtils.uuid());
                                ws.setXlid(entity.getId());
                                ws.setSheng(list.get(j).getSheng());
                                ws.setCs(list.get(j).getShi());
                                dao.baseMxInsert(ws);//添加线路明细数据
                            }
                        }
                        if (sb.length()>0){
                            throw new SucessException("线路编辑成功,"+sb+"省市已存在");
                        }else {
                            throw new SucessException("线路编辑成功");
                        }
                }else {
                    throw new ServiceException("线路编辑失败");
                }
            }
    }

   /**
    *修改（根据主键ID修改）
    * @param entity 主键ID列表
    * @return int
    */
    public Integer baseUpdateByPrimaryKey( WmsLine entity){
         return dao.baseUpdateByPrimaryKey( entity);
    }

        /**
         *查询路线名称
         */
        public Integer getcount( String xlmc, String hzid,String id){
            return dao.getcount(xlmc, hzid ,id);
        }

        /**
         *作废（根据主键ID修改）
         * @param ids 主键ID列表
         * @return int
         */
        public void baseZuoFei(List<String> ids,String sfzf) throws SucessException,ServiceException{
               int i=dao.baseZuoFei(ids,sfzf);
               if (i>0){
                   throw new SucessException("线路作废成功");
               }else{
                   throw new ServiceException("线路作废失败");
               }
        }

        /**
         *激活（根据主键ID修改）
         * @param ids 主键ID列表
         * @return int
         */
        public void baseJiHuo(List<String> ids,String sfzf) throws SucessException,ServiceException{
            int i=dao.baseZuoFei(ids,sfzf);
            if (i>0){
                throw new SucessException("线路激活成功");
            }else{
                throw new ServiceException("线路激活失败");
            }
        }

        /**
         * 查询集货库位组
         * @param
         * @return
         */
        @BaseServiceDescribe(moduleName = "集货库位",btnName = "集货库位")
        public List<WmsLibrarypositiongroup> jhKwz(String sshzid,String kwzlx,String sfyx) throws Exception{
            List<WmsLibrarypositiongroup> list=null;
            List<WmsLibraryPosition> listkw=null;
            try {
                list=dao.jhKwz(sshzid,kwzlx,sfyx);
                for (int i=0;i<list.size();i++){
                    listkw= dao.kwSearch(list.get(i).getId());
                    list.get(i).setList(listkw);
                }
                return list;
            }catch (Exception e){
                throw  new SecurityException("查询集货库位组失败",e);
            }
        }
        /**
         *根据线路id 查询线路明细
         */
        public List<WmsLineDetailed> lingMxSelect(@Param("id") String id) throws ServiceException{
            List<WmsLineDetailed> list=null;
            try {
                list=dao.lingMxSelect(id);
                return list;
            }catch (Exception e){
                throw new ServiceException("查询城市明细失败");
            }
        }

        /**
         * 查询库位
         * @param sskwzid
         * @return
         */
       /* @BaseServiceDescribe(moduleName = "库位",btnName = "模糊查询货主")
        public List<WmsLibraryPosition> hzSearch(String sskwzid,String mc){
            if (sskwzid!=null && sskwzid.equals("")){
            }else{
                PageHelper.startPage(1,20);
            }
            return dao.hzSearch(sskwzid,mc);
        }*/
}
